package me.mononin.common.common.app;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;

import java.util.List;

import butterknife.ButterKnife;
import me.mononin.common.common.widget.convention.PlaceHolderView;

/**
 * @author  mononing on 18-2-22.
 */

public abstract class Activity extends AppCompatActivity {

    protected PlaceHolderView mPlaceHolderView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //进行初始化窗口
        initWindows();
        //判断是否传递参数
        if (initArgs(getIntent().getExtras())){
            setContentView(getContentId());
            initBefore();
            initWidget();
            initData();
        }else {
            finish();
        }
    }

    /**
     * 初始化空间之前
     */
    protected void initBefore(){

    }
    /**
     * 获取activity中的content资源ID
     * @return 资源ID
     */
    protected abstract int getContentId();

    /**
     * 界面未初始化时初始化窗口
     */
    protected void initWindows(){

    }
    /**
     * 初始化控件
     */
    protected void initWidget(){
        ButterKnife.bind(this);
    }

    /**
     * 初始化数据
     */
    protected void initData(){

    }

    /**
     * 初始化参数
     * @param bundle 初始化传递的参数
     * @return
     */
    protected boolean initArgs(Bundle bundle){
        return true;
    }

    /**
     * 导航栏上返回键返回效果实现
     * @return
     */
    @Override
    public boolean onSupportNavigateUp() {
        finish();
        return super.onSupportNavigateUp();
    }

    /**
     * 系统返回键功能覆写
     */
    @Override
    public void onBackPressed() {
        //获取当前activity中所有的fragment
        List<android.support.v4.app.Fragment> fragments = getSupportFragmentManager().getFragments();
        //进行边界条件判断
        if (fragments!=null&&fragments.size()>0){
            //循环
            for (Fragment fragment:fragments){
                if (fragment instanceof me.mononin.common.common.app.Fragment){
                    //判断fragment中的返回方法是否拦截，没有拦截就return
                    if (((me.mononin.common.common.app.Fragment) fragment).onBackPressed()){
                        return;
                    }
                }
            }
        }
        super.onBackPressed();
        finish();
    }
    /**
     * 设置占位布局
     *
     * @param placeHolderView 继承了占位布局规范的View
     */
    public void setPlaceHolderView(PlaceHolderView placeHolderView){
        mPlaceHolderView = placeHolderView;
    }
}
